package sk.stuba.fiit.perconik.eclipse.jdt.core;
import java.util.LinkedList;
import com.google.common.base.Joiner;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IClassFile;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import static com.google.common.collect.Lists.newLinkedList;
public final class ClassFiles {
private ClassFiles() {}
public static IPath path(final IClassFile file) {
LinkedList<String> segments = newLinkedList();
IJavaElement element = file;
do {
JavaElementType type = JavaElementType.valueOf(element);
if (type == JavaElementType.PACKAGE_FRAGMENT_ROOT) {
IPackageFragmentRoot root = (IPackageFragmentRoot) element;
String segment = !root.isExternal() ? element.getPath().toString() : root.getElementName();
if (segment.startsWith("/")) {
segment = segment.substring(1);
}
segments.addFirst(segment);
break;
}
String segment = element.getElementName();
if (type == JavaElementType.PACKAGE_FRAGMENT) {
segment = segment.replace('.', '/');
}
segments.addFirst(segment);
} while ((element = element.getParent()) != null);
return new Path(Joiner.on('/').skipNulls().join(segments));
}
}